package com.shuwei.location.db;

import java.util.Collection;
import java.util.List;

/**
 * Created by Halohoop on 2017/10/24.
 */

interface ISWDBHelper<T> {

    /**
     * 保存数据
     * @param t
     */
    void save(T t);

    /**
     * 保存所有数据
     * @param collection
     */
    void saveAll(Collection<T> collection);

    /**
     * 根据id删除对应的数据
     * @param id
     */
    void deleteById(Object id);

    /**
     * 根据匹配某column的值来删除，比如通过外键来删除表中的一堆值
     * @param columnName
     * @param value
     */
    void deleteByColumnAndValue(String columnName, Object value);

    /**
     * 清空对应表名中的所有数据
     */
    void clear();

    /**
     * 清空对应表名中的所有数据
     * @param t
     */
    void update(T t);

    /**
     * 根据类名（表名）查找所有的数据
     * @param table
     * @return
     */
    List<T> queryAll(Class<T> table);

    /**
     * 通过排序的方式查找所有的数据
     * @param table
     * @param order
     * @return
     */
    List<T> queryAll(Class<T> table, String order);

    /**
     * 通过排序和一页显示多少条数据来查询所有的数据
     * @param table
     * @param order
     * @param limit
     * @return
     */
    List<T> queryAll(Class<T> table, String order, int limit);

    /**
     * @param table
     * @param useWhere
     * @param conditions        不需要加入 WHERE 关键字，只需要条件即可，必须是有占位符的，比如
     *                          AGE >= 25 AND SALARY >= 65000要写成，AGE >= ? AND SALARY >= ?
     * @param whereSelections
     * @param useOrder
     * @param isAsc
     * @param orderByColumnName
     * @param useLimit
     * @param limit
     * @return
     */
    List<T> queryAllByOrderOrLimit(Class<T> table,
                                   boolean useWhere, String conditions, String[]
                                           whereSelections,
                                   boolean useOrder, boolean isAsc, String
                                           orderByColumnName,
                                   boolean useLimit, int limit);

    /**
     * 通过id查找对应的数据
     * @param table
     * @param id
     * @return
     */
    T queryById(Class<T> table, Object id);

}
